package com.android.act;

import java.util.ArrayList;

import android.graphics.drawable.Drawable;
import android.location.Location;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;

import com.android.MyApp;
import com.android.R;
import com.android.model.StationModel;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.MyLocationOverlay;

public class MapLocationOverlay extends MapActivity {

	static MapView mMapView = null;// 地图View
	LocationListener mLocationListener = null;// onResume时注册此listener，onPause时需要Remove
	MyLocationOverlay mLocationOverlay = null; // 定位图层
	MKSearch mSearch = null; // 搜索模块，也可去掉地图模块独立使用
	MyApp app;
	static View mPopView = null; // 点击mark时弹出的气泡View
	OverItemT overitem = null;

	public static ArrayList<StationModel> shopList = null;

	@SuppressWarnings("unchecked")
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_mapviewdemo);
		app = (MyApp) this.getApplication();
		shopList = (ArrayList<StationModel>) getIntent().getSerializableExtra("shopList"); 
		findViews();
	}

	private void findViews() {
		mMapView = (MapView) findViewById(R.id.bmapView);		
	}

	private void initSearch() {
		if (app.mBMapMan == null) {
			app.mBMapMan = new BMapManager(getApplication());
			app.mBMapMan.init(app.mStrKey, new MyApp.MyGeneralListener());
		}
		app.mBMapMan.start();
		// 如果使用地图SDK，请初始化地图Activity
		super.initMapActivity(app.mBMapMan);

	
		mMapView.setBuiltInZoomControls(true);
		// 设置在缩放动画过程中也显示overlay,默认为不绘制
		mMapView.setDrawOverlayWhenZooming(true);

		// 添加定位图层
		mLocationOverlay = new MyLocationOverlay(this, mMapView);
		mMapView.getOverlays().add(mLocationOverlay);

		// 注册定位事件
		mLocationListener = new LocationListener() {

			@Override
			public void onLocationChanged(Location location) {
				if (location != null) {
					GeoPoint pt = new GeoPoint((int) (location.getLatitude() * 1e6),(int) (location.getLongitude() * 1e6));

					mMapView.getController().animateTo(pt);
					// mMapView.getController().setCenter(pt);
				}
			}
		};
		//
		// // 初始化搜索模块，注册事件监听
		// mSearch = new MKSearch();
		//
		// mSearch.init(app.mBMapMan, new MKSearchListener() {
		// public void onGetAddrResult(MKAddrInfo res, int error) {
		// if (error != 0) {
		// String str = String.format("错误号：%d", error);
		// Toast.makeText(LocationOverlay.this, str, Toast.LENGTH_LONG)
		// .show();
		// return;
		// }
		//
		// mMapView.getController().animateTo(res.geoPt);
		//
		// // String strInfo = String.format("1纬度：%f 经度：%f\r\n 地址：%s\r\n",
		// // res.geoPt.getLatitudeE6()/1e6,
		// // res.geoPt.getLongitudeE6()/1e6,res.addressComponents.city +
		// // res.addressComponents.district +
		// // res.addressComponents.street );
		// // String strInfo = String.format("1纬度：%f 经度：%f\r\n  ",
		// // res.geoPt.getLatitudeE6() / 1e6,
		// // res.geoPt.getLongitudeE6() / 1e6);
		// //
		// // Toast.makeText(LocationOverlay.this, strInfo, Toast.LENGTH_LONG)
		// // .show();
		// Drawable marker = getResources().getDrawable(
		// R.drawable.marker3); // 得到需要标在地图上的资源
		// marker.setBounds(0, 0, marker.getIntrinsicWidth(),
		// marker.getIntrinsicHeight()); // 为maker定义位置和边界
		// // mMapView.getOverlays().clear();
		// mMapView.getOverlays().add(
		// new OverItemT(marker, LocationOverlay.this, res.geoPt,
		// res.strAddr));
		// }
		//
		// public void onGetPoiResult(MKPoiResult res, int type, int error) {
		// if (error != 0 || res == null) {
		// Toast.makeText(LocationOverlay.this, "解析失败",
		// Toast.LENGTH_LONG).show();
		// return;
		// }
		// if (res != null && res.getCurrentNumPois() > 0) {
		// GeoPoint ptGeo = res.getAllPoi().get(0).pt;
		// // 移动地图到该点：
		// mMapView.getController().animateTo(ptGeo);
		//
		// // String strInfo = String.format("2纬度：%f 经度：%f\r\n",
		// // ptGeo.getLatitudeE6() / 1e6,
		// // ptGeo.getLongitudeE6() / 1e6);
		// // strInfo += "\r\n附近有：";
		// // for (int i = 0; i < res.getAllPoi().size(); i++) {
		// // strInfo += (res.getAllPoi().get(i).name + ";");
		// // }
		// // Toast.makeText(LocationOverlay.this, strInfo,
		// // Toast.LENGTH_LONG).show();
		// }
		// }
		//
		// public void onGetDrivingRouteResult(MKDrivingRouteResult res,
		// int error) {
		// }
		//
		// public void onGetTransitRouteResult(MKTransitRouteResult res,
		// int error) {
		// }
		//
		// public void onGetWalkingRouteResult(MKWalkingRouteResult res,
		// int error) {
		// }
		//
		// public void onGetBusDetailResult(MKBusLineResult result, int iError)
		// {
		// }
		// });
		// GeoPoint ptCenter = new GeoPoint((int)(36.65933*1e6),
		// (int)(117.101579*1e6));//mMapView.getMapCenter();
		// mSearch.reverseGeocode(ptCenter);
		//
		// GeoPoint pt = new GeoPoint((int) (Common.lat * 1e6),(int) (Common.lon
		// * 1e6));
		// mMapView.getController().animateTo(pt);

		// 添加ItemizedOverlay
		Drawable marker = getResources().getDrawable(R.drawable.pin_green); // 得到需要标在地图上的资源
		marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight()); // 为maker定义位置和边界
		mPopView = super.getLayoutInflater() .inflate(R.layout.map_popview, null);
		if (shopList != null) {
			overitem = new OverItemT(marker, this, shopList.size());
			mMapView.getOverlays().add(overitem); // 添加ItemizedOverlay实例到mMapView
			mMapView.addView(mPopView, new MapView.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, null, MapView.LayoutParams.TOP_LEFT));
			mPopView.setVisibility(View.GONE);
		}
	}

	@Override
	protected void onPause() {
		MyApp app = (MyApp) this.getApplication();
		app.mBMapMan.getLocationManager().removeUpdates(mLocationListener);
		mLocationOverlay.disableMyLocation();
		mLocationOverlay.disableCompass(); // 关闭指南针
		app.mBMapMan.stop();
		super.onPause();
	}

	@Override
	protected void onResume() {
		initSearch(); 
		// 注册定位事件，定位后将地图移动到定位点
		app.mBMapMan.getLocationManager().requestLocationUpdates( mLocationListener);
		mLocationOverlay.enableMyLocation();
		mLocationOverlay.enableCompass(); // 打开指南针
		app.mBMapMan.start();
		super.onResume();
	}

	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}

} 
